﻿using System;
using System.Collections.Generic;
using AbstractProducts;

namespace AbstractBugTracker
{
    public interface IBugTracker<TBug, TBugDef>
        where TBug : class, IBug
        where TBugDef : BugDef
    {
        TBugDef CreateBugDef(BugRef bugRef);
        IEnumerable<ProductRef> LinkedProducts { get; }
        IEnumerable<TBug> Search(BugRef bugRef);
        IEnumerable<TBug> Search(string value);
        TBug CreateBug(TBugDef bugDef);
        DateTime GetEarliestBuildDate(ProductRef productRef);
        bool GetReportsAreAutomaticallySent(ProductRef productRef);
        IEnumerable<ProductDependency> GetProductDependencies(ProductRef productRef);
        IEnumerable<KeyValuePair<string, string>> GetPropertyFilters(ProductRef productRef);
        IExceptionReportHasher GetExceptionReportHasher(ProductRef productRef);
        IExceptionReportMapper GetExceptionReportMapper(ProductRef productRef);
    }
}
